package com.hb.trans.global

import com.basiclib.network.ErrorHandlerFactory
import com.basiclib.network.RxErrorHandler
import com.hb.trans.bean.Base
import io.reactivex.Observer
import io.reactivex.annotations.NonNull
import io.reactivex.disposables.Disposable

abstract class ErrorHandleSubscriber<T>(rxErrorHandler: RxErrorHandler) : Observer<T> {
    private lateinit var mHandlerFactory: ErrorHandlerFactory

    init {
        mHandlerFactory = rxErrorHandler.getHandlerFactory()
    }


    override fun onSubscribe(@NonNull d: Disposable) {

    }

    override fun onNext(t: T) {
        if (t is Base<*>) {
            /*if (t.code == 402) {
                ARouter.getInstance().build(ACTIVITY_LOGIN).navigation()
            }*/
        }
        next(t)
    }

    abstract fun next(t: T)

    override fun onComplete() {

    }


    override fun onError(@NonNull t: Throwable) {
        t.printStackTrace()
        //如果你某个地方不想使用全局错误处理,则重写 onError(Throwable) 并将 super.onError(e); 删掉
        //如果你不仅想使用全局错误处理,还想加入自己的逻辑,则重写 onError(Throwable) 并在 super.onError(e); 后面加入自己的逻辑
        mHandlerFactory.handleError(t)
    }
}